﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace Invoice.Helper
{
    public static class KNSStringHelper
    {
        public static string BuildWrapText(string text, int maxLength)
        {
            string result = string.Empty;
            string[] arrString = Wrap(text, maxLength);
            if (arrString != null && arrString.Length > 1)
            {
                foreach (string str in arrString)
                {
                    result += string.Format("{0}\n", str.TrimStart());
                }
            }
            else if(arrString != null && arrString.Length > 0)
            {
                result = arrString[0];
            }
            return result;
        }
        public static string[] Wrap(string text, int maxLength)
        {
            text = text.Replace("\n", " ");
            text = text.Replace("\r", " ");
            text = text.Replace(".", ". ");
            text = text.Replace(">", "> ");
            text = text.Replace("\t", " ");
            text = text.Replace(",", ", ");
            text = text.Replace(";", "; ");
            //text = text.Replace("", " ");
            text = text.Replace(" ", " ");

            string[] Words = text.Split(' ');
            int currentLineLength = 0;
            ArrayList Lines = new ArrayList(text.Length / maxLength);
            string currentLine = "";
            bool InTag = false;


            foreach (string currentWord in Words)
            {
                //ignore html
                if (currentWord.Length > 0)
                {
                    if (currentWord.Substring(0, 1) == "<")
                    {
                        InTag = true;
                    }

                    if (InTag)
                    {
                        //handle filenames inside html tags
                        if (currentLine.EndsWith("."))
                        {
                            currentLine += currentWord;
                        }
                        else
                        {
                            currentLine += " " + currentWord;
                        }

                        if (currentWord.IndexOf(">") > -1)
                        {
                            InTag = false;
                        }
                    }
                    else
                    {
                        if (currentLineLength + currentWord.Length + 1 < maxLength)
                        {
                            currentLine += " " + currentWord;
                            currentLineLength += (currentWord.Length + 1);
                        }
                        else
                        {
                            Lines.Add(currentLine);
                            currentLine = currentWord;
                            currentLineLength = currentWord.Length;
                        }
                    }
                }
            }

            if (currentLine != "")
            {
                Lines.Add(currentLine);
            }

            string[] textLinesStr = new string[Lines.Count];
            Lines.CopyTo(textLinesStr, 0);
            return textLinesStr;
        }
    }
}
